import request from '@/utils/request.js' // 从request导入封装了axios请求的函数，request是一个函数
import { getStorage } from '../utils/storage'

// 用户 - 关注
export const userFollowedAPI = ({ userId }) => request({
  url: '/v1_0/user/followings',
  method: 'POST',
  data: {
    target: userId
  }
})
// 用户 - 取关
export const userUnFollowedAPI = ({ userId }) => request({
  url: `/v1_0/user/followings/${userId}`,
  method: 'DELETE'
})

// 用户 - 点赞
export const userLikeAPI = ({ userId }) => request({
  url: '/v1_0/article/likings',
  method: 'POST',
  data: {
    target: userId
  }
})
// 用户 - 取消点赞
export const userUnlikeAPI = ({ userId }) => request({
  url: `/v1_0/article/likings/${userId}`,
  method: 'DELETE'
})

// 用户 - 获取用户基本资料
export const userInfoAPI = () => request({
  url: '/v1_0/user'
})

// 用户 - 获取个人资料（生日）
export const userProfileAPI = () => request({
  url: '/v1_0/user/profile'
})

// 用户 - 编辑用户照片 fd要传formData表单 multipart/form-data
export const updatePhotoAPI = (fd) => request({
  url: '/v1_0/user/photo',
  method: 'PATCH',
  data: fd // fd外边传进来一个new FromData表单对象
})

// 用户 - 修改名字生日等信息
export const updateProfileAPI = (dataObj) => {
  // 判断：有值才带参数名给后台
  // 写法1，解构赋值，写4个判断，往空对象上添加，有值的加上去
  // 写法2：：外面相传几个对象key+value就直接传给后台
  // 写法3：上面写法不够语义化，我看不出obj里有什么
  const obj = {
    name: '',
    gender: 0,
    birthday: '',
    intro: ''
  }
  // 遍历传入的参数对象dataObj的每个键值对 prop为obj里每一项
  for (const prop in obj) {
    if (dataObj[prop] === undefined) {
      // 如果外面没有传某条参数，就删了obj中这对成员
      delete obj[prop]
    } else {
      // 如果使用了，就将dataObj的参数值赋值给obj
      obj[prop] = dataObj[prop]
    }
  }
  return request({
    url: '/v1_0/user/profile',
    method: 'PATCH',
    // data里即使为空，也会将null传送给后台
    data: obj
  })
}

// 用户 - 刷新token
export const getNewTokenAPI = () => request({
  url: '/v1_0/authorizations',
  method: 'PUT',
  headers: {
    // 请求拦截器
    Authorization: 'Bearer ' + getStorage('refresh_token')
  }
})
